package com.alinesno.cloud.initializr.starter.codegen.init;

import java.io.File;
import java.util.Map;

import org.gitlab4j.api.GitLabApiException;

import com.alinesno.cloud.initializr.starter.cicd.gitlab.common.Gitlab4jClient;
import com.alinesno.cloud.initializr.starter.cicd.gitlab.service.ProjectService;
import com.alinesno.cloud.initializr.starter.entity.BuildGitEntity;
import com.alinesno.cloud.initializr.starter.seedgen.bean.ProjectInfoDto;

/**
 * 初始化项目工程
 * 
 * @author WeiXiaoJin
 * @date 2021年6月21日 下午5:06:22
 */
public interface InitProjectService {

	/**
	 * 初始化远程仓库
	 * 
	 * @param info
	 * @return
	 * @throws GitLabApiException
	 */
	public ProjectInfoDto initRepo(ProjectInfoDto info, Map<String, byte[]> data, Gitlab4jClient gitlab4jclient)
			throws GitLabApiException;

	/**
	 * 上传代码和目录到仓库
	 */
	public void uploadFileRepo(File file, String path, Integer projectId, Integer userId,
			ProjectService gitlabProjectService);

	/**
	 * 初始化和生成工程
	 */
	public void initProject(ProjectInfoDto info);

	/**
	 * 运行工程并构建镜像
	 * 
	 * @param info
	 */
	public void initDocker(ProjectInfoDto info);

	/**
	 * 创建命名空间
	 * 
	 * @param groupName
	 */
	public void createGroup(String groupName);

	/**
	 * 创建一个执行任务
	 * 
	 * @param runnerToken
	 */
	public void createRunner(String runnerToken);

	/**
	 * 上传gitee
	 * 
	 * @param info
	 * @param data
	 * @param client
	 * @return
	 */
	public ProjectInfoDto initGiteeRepo(ProjectInfoDto info, Map<String, byte[]> data, BuildGitEntity e);

	/**
	 * 初始化gitea仓库空间
	 * 
	 * @param info
	 * @param data
	 * @param e1
	 * @return
	 */
	public ProjectInfoDto initGiteaRepo(ProjectInfoDto info, Map<String, byte[]> data, BuildGitEntity e1);

}
